﻿using System;
using System.Collections;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;
using System.Collections.Generic;
using System.Drawing;

namespace WebArchivosTelefonica.Jerarquias
{
    /// <summary>
    /// Control para administrar otros documentos
    /// </summary>
    public partial class ControlOtrosDocumentos : System.Web.UI.UserControl
    {
        private Color _backColorPestañaNormal;
        private Color _backColorPestañaResaltada;
        private Color _borderColorPestañaNormal;
        private Color _borderColorPestañaResaltada;


        /// <summary>
        /// Page load del control
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void Page_Load(object sender, EventArgs e)
        {
            _backColorPestañaNormal = Color.FromArgb(102, 153, 255);
            _backColorPestañaResaltada = Color.FromArgb(0, 102, 255);
            _borderColorPestañaNormal = Color.FromArgb(153, 153, 153);
            _borderColorPestañaResaltada = Color.FromArgb(204, 204, 204);
            ConfigurarDataSourceControl();

            _fileUploadOtroDocumento.Enabled = Roles.IsUserInRole("Creador");
            ButtonAceptar.Enabled = Roles.IsUserInRole("Creador");
            _textBoxDescripcion.Enabled = Roles.IsUserInRole("Creador");
        }

        private void ConfigurarDataSourceControl()
        {
            // creamos un string con la sentencia vacia
            string sentenciaWhere = string.Empty;
            // si hay valor en las cajas de texto se usa el valor de la propiedad
            // Text para incluir dicho valor en el filtrado de los datos.

            sentenciaWhere += "JerarquiaCarpeta.Nombre == @NombreCarpetaBase && AsociacionCandidatoDocumento.IdCandidato == Guid(@IdCandidato)";
            _linqDataSourceOtrosDocumentos.Where = sentenciaWhere;
         
        }
        /// <summary>
        /// 
        /// </summary>
        public string IdCandidatoTexto
        {
            get { return HiddenFieldIdCandidato.Value; }
            set { HiddenFieldIdCandidato.Value = value; _linqDataSourceOtrosDocumentos.DataBind(); }
        }

        /// <summary>
        /// 
        /// </summary>
        public string IdCarpetaBaseTexto
        {
            get { return HiddenFieldIdCarpetaBase.Value; }
            set { HiddenFieldIdCarpetaBase.Value = value; _linqDataSourceOtrosDocumentos.DataBind(); }
        }

        /// <summary>
        /// Cambia los valores de la carpeta base seleccionada
        /// </summary>
        /// <param name="idCandidato">id del candidato</param>
        /// <param name="idProyecto">id del proyecto</param>
        /// <param name="nombreCarpetaBase">Nombre de la carpeta base</param>
        /// <param name="administrador">Administrador </param>
        public void CambiarValoresCarpeta(string idCandidato, string idProyecto, string nombreCarpetaBase, IAdministrador administrador)
        {

            HiddenFieldIdCandidato.Value = idCandidato;
            List<InfoJerarquia> dataSourcePestañas = administrador.GetDataSourceCarpetasHijas(nombreCarpetaBase);
            _barraBotones.DataSource = dataSourcePestañas;
            _barraBotones.DataBind();

            if (_barraBotones.Items.Count > 0)
            {
                SeleccionarPestaña(0, _barraBotones.Items[0]);
            }
        }

        /// <summary>
        /// 
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void GridViewOtrosDoc_RowCommand(object sender, GridViewCommandEventArgs e)
        {
            if (e.CommandName == "Ver")
            {
                int filaActualizada = int.Parse(e.CommandArgument.ToString());
                Guid idDocumento = new Guid(_gridViewOtrosDoc.DataKeys[filaActualizada].Value.ToString());

                DataClassesArbolDataContext dc = new DataClassesArbolDataContext();
                Documento documentoModificado = dc.Documentos.Single(x => x.Id == idDocumento);


                if (documentoModificado != null)
                {
                    string fileName = documentoModificado.Nombre;

                    Response.Clear();
                    Response.AppendHeader("Content-Disposition", "attachment; filename=" + fileName);
                    Response.BinaryWrite(documentoModificado.Archivo.ToArray());
                    Response.End();
                }
            }
        }
        /// <summary>
        /// 
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void ButtonAceptar_Click(object sender, EventArgs e)
        {
            if (_fileUploadOtroDocumento.HasFile)
            {
                Administrador admin = new Administrador(new FabricaLinqDataSource(), new EntidadLinqDataContext());
                System.Data.Linq.Binary datos = new System.Data.Linq.Binary(_fileUploadOtroDocumento.FileBytes);

                admin.UploadDocumento(_fileUploadOtroDocumento.FileName, datos, _textBoxDescripcion.Text, new Guid(HiddenFieldIdCarpetaBase.Value), new Guid(HiddenFieldIdCandidato.Value));
            }
            _linqDataSourceOtrosDocumentos.DataBind();
            _gridViewOtrosDoc.DataBind();
            _textBoxDescripcion.Text = "";
        }
        /// <summary>
        /// 
        /// </summary>
        /// <param name="source"></param>
        /// <param name="e"></param>
        protected void _barraBotones_ItemCommand(object source, RepeaterCommandEventArgs e)
        {

            if (e.CommandName == "Seleccionar")
            {
                SeleccionarPestaña(e.Item.ItemIndex, e.Item);
            }
        }


        private void SeleccionarPestaña(int indexPestaña, RepeaterItem item)
        {
            for (int i = 0; i < _barraBotones.Items.Count; i++)
            {
                Button botonBarra = _barraBotones.Items[i].FindControl("_botonPestañaDataSource") as Button;
                if (i == indexPestaña)
                {
                    ResaltarBoton(botonBarra);
                }
                else
                {
                    NormalizarBoton(botonBarra);
                }
            }
            HiddenField id = item.FindControl("_hiddenFieldId") as HiddenField;
            HiddenField nombreDirectorio = item.FindControl("_hiddenFieldNombreCarpeta") as HiddenField;
            string nombreCarpeta = nombreDirectorio.Value;
            string idCarpeta = id.Value;
            HiddenFieldIdCarpetaBase.Value = idCarpeta;
            HiddenFieldNombreCarpetaOtros.Value = nombreCarpeta;
            ConfigurarDataSourceControl();
            _linqDataSourceOtrosDocumentos.DataBind();
        }



        private void ResaltarBoton(Button boton)
        {
            boton.BackColor = _backColorPestañaResaltada;
            boton.BorderColor = _borderColorPestañaResaltada;
        }

        private void NormalizarBoton(Button boton)
        {
            boton.BackColor = _backColorPestañaNormal;
            boton.BorderColor = _borderColorPestañaNormal;
        }

    }

}